const { getDb } = require('../config/db.js');
const { ObjectId } = require('mongodb');

// 创建一个json
exports.createObject = async (req, res) => {
  try {
    const collection = getDb().collection('objects');
    const obj = {
      jsonData: req.body.jsonData,
    };
    const result = await collection.insertOne(obj);
    res.status(201).json({ insertedId: result.insertedId });
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
};

// 返回分页的对象
exports.getObjects = async (req, res) => {
  try {
    const collection = getDb().collection('objects');

    // 从查询参数获取页码和每页的对象数
    const page = parseInt(req.query.page) || 1; // 默认第1页
    const pageSize = parseInt(req.query.pageSize) || 10; // 默认每页10个对象

    // 计算跳过的对象数
    const skip = (page - 1) * pageSize;

    // 获取分页的对象
    const objects = await collection.find({})
      .skip(skip)
      .limit(pageSize)
      .toArray();

    // 获取总对象数
    const totalObjects = await collection.countDocuments();

    // 计算总页数
    const totalPages = Math.ceil(totalObjects / pageSize);

    // 返回分页数据和分页信息
    res.status(200).json({
      objects,
      pageInfo: {
        currentPage: page,
        pageSize: pageSize,
        totalObjects: totalObjects,
        totalPages: totalPages,
      }
    });
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
};


// 根据ID获取json
exports.getObjectById = async (req, res) => {
  try {
    const id = req.query.id;
    // 检查 id 是否为有效的 ObjectId 字符串
    if (!ObjectId.isValid(id)) {
      return res.status(400).json({ error: '无效的 ObjectId' });
    }
    const collection = getDb().collection('objects');
    const obj = await collection.findOne({ _id: new ObjectId(id) });
    if (obj) {
      res.status(200).json(obj);
    } else {
      res.status(404).json({ error: '对象未找到' });
    }
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
};

// 根据ID更新json
exports.updateObject = async (req, res) => {
  try {
    const id = req.body.id;
    // 检查 id 是否为有效的 ObjectId 字符串
    if (!ObjectId.isValid(id)) {
      return res.status(400).json({ error: '无效的 ObjectId' });
    }
    const updatedObj = {
      jsonData: req.body.jsonData,
    };
    const collection = getDb().collection('objects');
    const result = await collection.updateOne(
      { _id: new ObjectId(id) },
      { $set: updatedObj }
    );
    if (result.matchedCount > 0) {
      res.status(200).json({ message: '对象已更新' });
    } else {
      res.status(404).json({ error: '对象未找到' });
    }
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
};

// 根据ID删除json
exports.deleteObject = async (req, res) => {
  try {
    const id = req.body.id;
    // 检查 id 是否为有效的 ObjectId 字符串
    if (!ObjectId.isValid(id)) {
      return res.status(400).json({ error: '无效的 ObjectId' });
    }
    const collection = getDb().collection('objects');
    const result = await collection.deleteOne({ _id: new ObjectId(id) });
    if (result.deletedCount > 0) {
      res.status(200).json({ message: '对象已删除' });
    } else {
      res.status(404).json({ error: '对象未找到' });
    }
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
};
